查看原文
其他

Cheat Engine gtutorial-i386闯关记 第一关

hyjxiaobia 看雪学院 2019-05-25

网上清一色介绍Cheat Engine目录下Tutorial-i386.exe的闯关教程,几乎没人关注过gtutorial-i386.exe的闯关步骤。那就容我抛砖引玉,能过几关就写几篇教程。


运行gtutorial-i386.exe,第一关作者意图为:玩家操作小飞行器射击目标,每次按空格射击目标后,目标会掉一定的血量,五次射击后目标血槽会加满,当然飞行器的子弹也会加满,如下图:


由于我们并不知道目标初始时的HP值是多少以及每次受到攻击后掉多少HP,所以只能选用模糊扫描:"Scan Type"选"Unknown initial value","Value Type"选"4 Bytes",然后点击"First Scan"。每次目标受到攻击后,"Scan Type"选"Decreased value"然后点击"Next Scan"。当目标回满血时,"Scan Type"选"Increased value",再次点击"Next Scan"。反复几次这个过程,可以定位到修改目标HP值的变量。




定位到该变量后可以在CE中将变量Freeze(冻结),然后多次攻击目标,查看目标的血槽是不是没有变化,以此验证找到的变量是不是正确。比如,我把HP锁定为满血100,每次攻击目标后看血槽状态:


可以看到,冻结HP后经过几轮攻击,血槽固定在某个位置,看来找的变量没有错。另外,经过反复扫描,可以猜测作者在第一关中使用全局变量来修改目标血量。而全局变量在[4,28,52,76,100]这个集合中取值。


接下去,查看修改该变量的相关代码。右键CT表项中的地址,选择"Find out what writes to this address",然后再次攻击目标,CE会记录并显示修改血槽值的代码:



修改代码前先确认一下运行到这条指令时,edx的取值范围是不是在[4,28,52,76,100]中。在"The following opcodes write to xxxx"窗口中,点击"Show disassembler"按钮,进入"Memory Viewer"窗口,在下列指令出下断点,然后回到游戏gtutorial-i386中继续攻击目标。目标掉血时会触发断点,此时查看edx的值:

gtutorial-i386.exe+314F0 - 89 50 58 - mov [eax+58],edx



确认无误后,对这条指令进行注入,注入方式有很多可以是"Full Injection"也可以使"AOB Injection"。我选择的"AOB Injection",因为在多次试验中,我发现使用"Full Injection"方式,有时候目标受到攻击后血槽会超出整个血条,我估计可能跟程序地址随机加载有关,不适合用硬编码的方式注入;而AOB方式在注入前会验证代码,如果注入点验证不通过,则CE不会往下执行。虽然这种方式显得外挂没有起效,但总比使用外挂后,反补对方好吧~


进入"Memory Viewer"窗口工具栏Tools--"Auto Assemble",将出现"Auto assemble"窗口。选择工具栏中Template--"AOB Injection",在生成的AOB脚本模板上修改注入代码,如下面的代码片:


define(symbol,89 50 58 83 78 54 00)

[ENABLE]

aobscanmodule(INJECT,gtutorial-i386.exe,89 50 58 83 78 54 00) // should be unique

assert(INJECT,symbol)

alloc(newmem,$1000)

label(code)

label(return)



newmem:

push edx

xor edx,edx

code:

mov [eax+58],edx

cmp dword ptr [eax+54],00

pop edx

jmp return

注:修改AOB模板后,千万不要点"Auto Assemble"窗口底部的"Execute"按钮,这个按钮会导致CE用脚本中的指令替换gtutorial-i386.exe+314F0处的指令(CE官网上称这是生成汇编)。如果脚本中的代码并不能如期的运行,不便于再修改,所以不是很推荐这种做法。


修改完成后,点击"Auto assemble"工具栏--File--"Assign to current cheat table",将AOB脚本添加到cheat table中:


脚本添加到cheat table后可以通过点击表项前的[]来启用/禁用脚本(和Freeze变量的做法一样),启用后,一击击碎目标,然后进入第二关:


最后,记得保存注入脚本,下次可以直接从"Auto Assemble"窗口File--Open加载保存的.CEA文件,并将AA脚本添加到Cheat table中,就不用重头再来一遍了(gtutorial-i386不像CE自带的教程,能跳过任一关卡,必须累死累活的一关一关的硬闯,搞的跟青铜圣斗士闯黄金12宫似的!)~

预告:


明日将更新《Cheat Engine gtutorial-i386 闯关记 第二关》



- End -


看雪ID:hyjxiaobia              

https://bbs.pediy.com/user-399589.htm


本文由看雪论坛 hyjxiaobia 原创

转载请注明来自看雪社区



热门图书推荐:

立即购买!



征题正在火热进行中!

(晋级赛Q1即将于3月10日开启,敬请期待!)



热门文章阅读


1、Zircon - Fuchsia 内核分析 - 启动(内核初始化)

2、Zircon - Fuchsia 内核分析 - 启动(平台初始化)

3、微信PC端技术研究:保存聊天语音

4、萌新对C++编写的动态库逆向分析


热门课程推荐










公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com


点击下方“阅读原文”

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存